package com.husd.framework.util;

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
import lombok.Data;

import java.util.List;

/**
 * @author shengdonghu@126.com
 * @date 2023/4/24 17:49
 */
@Data
@JacksonXmlRootElement(localName = "AddItemRequest")
public class OpenSdkEbayAddItemAddItemRequest {

    @JacksonXmlProperty(localName = "Item")
    private Item item;

    @Data
    @JacksonXmlRootElement(localName = "Item")
    public class Item {
        @JacksonXmlProperty(localName = "ApplicationData")
        private String applicationData;
        @JacksonXmlProperty(localName = "AutoPay")
        private Boolean autoPay;
        @JacksonXmlProperty(localName = "BestOfferDetails")
        private BestOfferDetails bestOfferDetails;

        @Data
        @JacksonXmlRootElement(localName = "BestOfferDetails")
        public class BestOfferDetails {
            @JacksonXmlProperty(localName = "BestOfferEnabled")
            private Boolean bestOfferEnabled;
        }

        @JacksonXmlProperty(localName = "BuyerResponsibleForShipping")
        private Boolean buyerResponsibleForShipping;
        @JacksonXmlProperty(localName = "BuyItNowPrice")
        private BuyItNowPrice buyItNowPrice;

        @Data
        @JacksonXmlRootElement(localName = "BuyItNowPrice")
        public class BuyItNowPrice {
            @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
            private String currencyID;
            @JacksonXmlText
            private String value;
        }

        @JacksonXmlProperty(localName = "CategoryMappingAllowed")
        private Boolean categoryMappingAllowed;
        @JacksonXmlProperty(localName = "Charity")
        private Charity charity;

        @Data
        @JacksonXmlRootElement(localName = "Charity")
        public class Charity {
            @JacksonXmlProperty(localName = "CharityID")
            private String charityID;
            @JacksonXmlProperty(localName = "DonationPercent")
            private Float donationPercent;
        }

        @JacksonXmlProperty(localName = "ConditionDescription")
        private String conditionDescription;
        @JacksonXmlProperty(localName = "ConditionID")
        private Integer conditionID;
        @JacksonXmlProperty(localName = "Country")
        private String country;
        @JacksonXmlElementWrapper(useWrapping = false)
        @JacksonXmlProperty(localName = "CrossBorderTrade")
        private List<String> crossBorderTrade;
        @JacksonXmlProperty(localName = "Currency")
        private String currency;
        @JacksonXmlProperty(localName = "CustomPolicies")
        private CustomPolicies customPolicies;

        @Data
        @JacksonXmlRootElement(localName = "CustomPolicies")
        public class CustomPolicies {
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "ProductCompliancePolicyID")
            private List<Long> productCompliancePolicyID;
            @JacksonXmlProperty(localName = "TakeBackPolicyID")
            private Long takeBackPolicyID;
        }

        @JacksonXmlProperty(localName = "Description")
        private String description;
        @JacksonXmlProperty(localName = "DigitalGoodInfo")
        private DigitalGoodInfo digitalGoodInfo;

        @Data
        @JacksonXmlRootElement(localName = "DigitalGoodInfo")
        public class DigitalGoodInfo {
            @JacksonXmlProperty(localName = "DigitalDelivery")
            private Boolean digitalDelivery;
        }

        @JacksonXmlProperty(localName = "DisableBuyerRequirements")
        private Boolean disableBuyerRequirements;
        @JacksonXmlProperty(localName = "DiscountPriceInfo")
        private DiscountPriceInfo discountPriceInfo;

        @Data
        @JacksonXmlRootElement(localName = "DiscountPriceInfo")
        public class DiscountPriceInfo {
            @JacksonXmlProperty(localName = "MadeForOutletComparisonPrice")
            private MadeForOutletComparisonPrice madeForOutletComparisonPrice;

            @Data
            @JacksonXmlRootElement(localName = "MadeForOutletComparisonPrice")
            public class MadeForOutletComparisonPrice {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "MinimumAdvertisedPrice")
            private MinimumAdvertisedPrice minimumAdvertisedPrice;

            @Data
            @JacksonXmlRootElement(localName = "MinimumAdvertisedPrice")
            public class MinimumAdvertisedPrice {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "MinimumAdvertisedPriceExposure")
            private String minimumAdvertisedPriceExposure;
            @JacksonXmlProperty(localName = "OriginalRetailPrice")
            private OriginalRetailPrice originalRetailPrice;

            @Data
            @JacksonXmlRootElement(localName = "OriginalRetailPrice")
            public class OriginalRetailPrice {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "SoldOffeBay")
            private Boolean soldOffeBay;
            @JacksonXmlProperty(localName = "SoldOneBay")
            private Boolean soldOneBay;
        }

        @JacksonXmlProperty(localName = "DispatchTimeMax")
        private Integer dispatchTimeMax;
        @JacksonXmlProperty(localName = "eBayPlus")
        private Boolean eBayPlus;
        @JacksonXmlProperty(localName = "ExtendedProducerResponsibility")
        private ExtendedProducerResponsibility extendedProducerResponsibility;

        @Data
        @JacksonXmlRootElement(localName = "ExtendedProducerResponsibility")
        public class ExtendedProducerResponsibility {
            @JacksonXmlProperty(localName = "EcoParticipationFee")
            private EcoParticipationFee ecoParticipationFee;

            @Data
            @JacksonXmlRootElement(localName = "EcoParticipationFee")
            public class EcoParticipationFee {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "ProducerProductID")
            private String producerProductID;
            @JacksonXmlProperty(localName = "ProductDocumentationID")
            private String productDocumentationID;
            @JacksonXmlProperty(localName = "ProductPackageID")
            private String productPackageID;
            @JacksonXmlProperty(localName = "ShipmentPackageID")
            private String shipmentPackageID;
        }

        @JacksonXmlProperty(localName = "ExtendedSellerContactDetails")
        private ExtendedSellerContactDetails extendedSellerContactDetails;

        @Data
        @JacksonXmlRootElement(localName = "ExtendedSellerContactDetails")
        public class ExtendedSellerContactDetails {
            @JacksonXmlProperty(localName = "ClassifiedAdContactByEmailEnabled")
            private Boolean classifiedAdContactByEmailEnabled;
            @JacksonXmlProperty(localName = "ContactHoursDetails")
            private ContactHoursDetails contactHoursDetails;

            @Data
            @JacksonXmlRootElement(localName = "ContactHoursDetails")
            public class ContactHoursDetails {
                @JacksonXmlProperty(localName = "Hours1AnyTime")
                private Boolean hours1AnyTime;
                @JacksonXmlProperty(localName = "Hours1Days")
                private String hours1Days;
                @JacksonXmlProperty(localName = "Hours1From")
                private String hours1From;
                @JacksonXmlProperty(localName = "Hours1To")
                private String hours1To;
                @JacksonXmlProperty(localName = "Hours2AnyTime")
                private Boolean hours2AnyTime;
                @JacksonXmlProperty(localName = "Hours2Days")
                private String hours2Days;
                @JacksonXmlProperty(localName = "Hours2From")
                private String hours2From;
                @JacksonXmlProperty(localName = "Hours2To")
                private String hours2To;
                @JacksonXmlProperty(localName = "TimeZoneID")
                private String timeZoneID;
            }

        }

        @JacksonXmlProperty(localName = "ItemCompatibilityList")
        private ItemCompatibilityList itemCompatibilityList;

        @Data
        @JacksonXmlRootElement(localName = "ItemCompatibilityList")
        public class ItemCompatibilityList {
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "Compatibility")
            private List<Compatibility> compatibility;

            @Data
            @JacksonXmlRootElement(localName = "Compatibility")
            public class Compatibility {
                @JacksonXmlProperty(localName = "CompatibilityNotes")
                private String compatibilityNotes;
                @JacksonXmlElementWrapper(useWrapping = false)
                @JacksonXmlProperty(localName = "NameValueList")
                private List<NameValueList> nameValueList;

                @Data
                @JacksonXmlRootElement(localName = "NameValueList")
                public class NameValueList {
                    @JacksonXmlProperty(localName = "Name")
                    private String name;
                    @JacksonXmlElementWrapper(useWrapping = false)
                    @JacksonXmlProperty(localName = "Value")
                    private List<String> value;
                }

            }

        }

        @JacksonXmlProperty(localName = "ItemSpecifics")
        private ItemSpecifics itemSpecifics;

        @Data
        @JacksonXmlRootElement(localName = "ItemSpecifics")
        public class ItemSpecifics {
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "NameValueList")
            private List<NameValueList> nameValueList;

            @Data
            @JacksonXmlRootElement(localName = "NameValueList")
            public class NameValueList {
                @JacksonXmlProperty(localName = "Name")
                private String name;
                @JacksonXmlElementWrapper(useWrapping = false)
                @JacksonXmlProperty(localName = "Value")
                private List<String> value;
            }

        }

        @JacksonXmlProperty(localName = "ListingDetails")
        private ListingDetails listingDetails;

        @Data
        @JacksonXmlRootElement(localName = "ListingDetails")
        public class ListingDetails {
            @JacksonXmlProperty(localName = "BestOfferAutoAcceptPrice")
            private BestOfferAutoAcceptPrice bestOfferAutoAcceptPrice;

            @Data
            @JacksonXmlRootElement(localName = "BestOfferAutoAcceptPrice")
            public class BestOfferAutoAcceptPrice {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "LocalListingDistance")
            private String localListingDistance;
            @JacksonXmlProperty(localName = "MinimumBestOfferPrice")
            private MinimumBestOfferPrice minimumBestOfferPrice;

            @Data
            @JacksonXmlRootElement(localName = "MinimumBestOfferPrice")
            public class MinimumBestOfferPrice {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

        }

        @JacksonXmlProperty(localName = "ListingDuration")
        private String listingDuration;
        @JacksonXmlElementWrapper(useWrapping = false)
        @JacksonXmlProperty(localName = "ListingEnhancement")
        private List<String> listingEnhancement;
        @JacksonXmlProperty(localName = "ListingSubtype2")
        private String listingSubtype2;
        @JacksonXmlProperty(localName = "ListingType")
        private String listingType;
        @JacksonXmlProperty(localName = "Location")
        private String location;
        @JacksonXmlProperty(localName = "LotSize")
        private Integer lotSize;
        @JacksonXmlProperty(localName = "PaymentDetails")
        private PaymentDetails paymentDetails;

        @Data
        @JacksonXmlRootElement(localName = "PaymentDetails")
        public class PaymentDetails {
            @JacksonXmlProperty(localName = "DaysToFullPayment")
            private Integer daysToFullPayment;
            @JacksonXmlProperty(localName = "DepositAmount")
            private DepositAmount depositAmount;

            @Data
            @JacksonXmlRootElement(localName = "DepositAmount")
            public class DepositAmount {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "DepositType")
            private String depositType;
            @JacksonXmlProperty(localName = "HoursToDeposit")
            private Integer hoursToDeposit;
        }

        @JacksonXmlElementWrapper(useWrapping = false)
        @JacksonXmlProperty(localName = "PaymentMethods")
        private List<String> paymentMethods;
        @JacksonXmlProperty(localName = "PayPalEmailAddress")
        private String payPalEmailAddress;
        @JacksonXmlProperty(localName = "PickupInStoreDetails")
        private PickupInStoreDetails pickupInStoreDetails;

        @Data
        @JacksonXmlRootElement(localName = "PickupInStoreDetails")
        public class PickupInStoreDetails {
            @JacksonXmlProperty(localName = "EligibleForPickupInStore")
            private Boolean eligibleForPickupInStore;
        }

        @JacksonXmlProperty(localName = "PictureDetails")
        private PictureDetails pictureDetails;

        @Data
        @JacksonXmlRootElement(localName = "PictureDetails")
        public class PictureDetails {
            @JacksonXmlProperty(localName = "GalleryType")
            private String galleryType;
            @JacksonXmlProperty(localName = "PhotoDisplay")
            private String photoDisplay;
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "PictureURL")
            private List<String> pictureURL;
        }

        @JacksonXmlProperty(localName = "PostalCode")
        private String postalCode;
        @JacksonXmlProperty(localName = "PrimaryCategory")
        private PrimaryCategory primaryCategory;

        @Data
        @JacksonXmlRootElement(localName = "PrimaryCategory")
        public class PrimaryCategory {
            @JacksonXmlProperty(localName = "CategoryID")
            private String categoryID;
        }

        @JacksonXmlProperty(localName = "PrivateListing")
        private Boolean privateListing;
        @JacksonXmlProperty(localName = "ProductListingDetails")
        private ProductListingDetails productListingDetails;

        @Data
        @JacksonXmlRootElement(localName = "ProductListingDetails")
        public class ProductListingDetails {
            @JacksonXmlProperty(localName = "BrandMPN")
            private BrandMPN brandMPN;

            @Data
            @JacksonXmlRootElement(localName = "BrandMPN")
            public class BrandMPN {
                @JacksonXmlProperty(localName = "Brand")
                private String brand;
                @JacksonXmlProperty(localName = "MPN")
                private String mPN;
            }

            @JacksonXmlProperty(localName = "EAN")
            private String eAN;
            @JacksonXmlProperty(localName = "IncludeeBayProductDetails")
            private Boolean includeeBayProductDetails;
            @JacksonXmlProperty(localName = "IncludeStockPhotoURL")
            private Boolean includeStockPhotoURL;
            @JacksonXmlProperty(localName = "ISBN")
            private String iSBN;
            @JacksonXmlProperty(localName = "ProductReferenceID")
            private String productReferenceID;
            @JacksonXmlProperty(localName = "ReturnSearchResultOnDuplicates")
            private Boolean returnSearchResultOnDuplicates;
            @JacksonXmlProperty(localName = "TicketListingDetails")
            private TicketListingDetails ticketListingDetails;

            @Data
            @JacksonXmlRootElement(localName = "TicketListingDetails")
            public class TicketListingDetails {
                @JacksonXmlProperty(localName = "EventTitle")
                private String eventTitle;
                @JacksonXmlProperty(localName = "PrintedDate")
                private String printedDate;
                @JacksonXmlProperty(localName = "PrintedTime")
                private String printedTime;
                @JacksonXmlProperty(localName = "Venue")
                private String venue;
            }

            @JacksonXmlProperty(localName = "UPC")
            private String uPC;
            @JacksonXmlProperty(localName = "UseFirstProduct")
            private Boolean useFirstProduct;
            @JacksonXmlProperty(localName = "UseStockPhotoURLAsGallery")
            private Boolean useStockPhotoURLAsGallery;
        }

        @JacksonXmlProperty(localName = "Quantity")
        private Integer quantity;
        @JacksonXmlProperty(localName = "QuantityInfo")
        private QuantityInfo quantityInfo;

        @Data
        @JacksonXmlRootElement(localName = "QuantityInfo")
        public class QuantityInfo {
            @JacksonXmlProperty(localName = "MinimumRemnantSet")
            private Integer minimumRemnantSet;
        }

        @JacksonXmlProperty(localName = "QuantityRestrictionPerBuyer")
        private QuantityRestrictionPerBuyer quantityRestrictionPerBuyer;

        @Data
        @JacksonXmlRootElement(localName = "QuantityRestrictionPerBuyer")
        public class QuantityRestrictionPerBuyer {
            @JacksonXmlProperty(localName = "MaximumQuantity")
            private Integer maximumQuantity;
        }

        @JacksonXmlProperty(localName = "Regulatory")
        private Regulatory regulatory;

        @Data
        @JacksonXmlRootElement(localName = "Regulatory")
        public class Regulatory {
            @JacksonXmlProperty(localName = "Hazmat")
            private Hazmat hazmat;

            @Data
            @JacksonXmlRootElement(localName = "Hazmat")
            public class Hazmat {
                @JacksonXmlProperty(localName = "Component")
                private String component;
                @JacksonXmlProperty(localName = "Pictograms")
                private Pictograms pictograms;

                @Data
                @JacksonXmlRootElement(localName = "Pictograms")
                public class Pictograms {
                    @JacksonXmlElementWrapper(useWrapping = false)
                    @JacksonXmlProperty(localName = "Pictogram")
                    private List<String> pictogram;
                }

                @JacksonXmlProperty(localName = "SignalWord")
                private String signalWord;
                @JacksonXmlProperty(localName = "Statements")
                private Statements statements;

                @Data
                @JacksonXmlRootElement(localName = "Statements")
                public class Statements {
                    @JacksonXmlElementWrapper(useWrapping = false)
                    @JacksonXmlProperty(localName = "Statement")
                    private List<String> statement;
                }

            }

            @JacksonXmlProperty(localName = "RepairScore")
            private String repairScore;
        }

        @JacksonXmlProperty(localName = "ReservePrice")
        private ReservePrice reservePrice;

        @Data
        @JacksonXmlRootElement(localName = "ReservePrice")
        public class ReservePrice {
            @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
            private String currencyID;
            @JacksonXmlText
            private String value;
        }

        @JacksonXmlProperty(localName = "ReturnPolicy")
        private ReturnPolicy returnPolicy;

        @Data
        @JacksonXmlRootElement(localName = "ReturnPolicy")
        public class ReturnPolicy {
            @JacksonXmlProperty(localName = "Description")
            private String description;
            @JacksonXmlProperty(localName = "InternationalRefundOption")
            private String internationalRefundOption;
            @JacksonXmlProperty(localName = "InternationalReturnsAcceptedOption")
            private String internationalReturnsAcceptedOption;
            @JacksonXmlProperty(localName = "InternationalReturnsWithinOption")
            private String internationalReturnsWithinOption;
            @JacksonXmlProperty(localName = "InternationalShippingCostPaidByOption")
            private String internationalShippingCostPaidByOption;
            @JacksonXmlProperty(localName = "RefundOption")
            private String refundOption;
            @JacksonXmlProperty(localName = "ReturnsAcceptedOption")
            private String returnsAcceptedOption;
            @JacksonXmlProperty(localName = "ReturnsWithinOption")
            private String returnsWithinOption;
            @JacksonXmlProperty(localName = "ShippingCostPaidByOption")
            private String shippingCostPaidByOption;
        }

        @JacksonXmlProperty(localName = "ScheduleTime")
        private String scheduleTime;
        @JacksonXmlProperty(localName = "SecondaryCategory")
        private SecondaryCategory secondaryCategory;

        @Data
        @JacksonXmlRootElement(localName = "SecondaryCategory")
        public class SecondaryCategory {
            @JacksonXmlProperty(localName = "CategoryID")
            private String categoryID;
        }

        @JacksonXmlProperty(localName = "Seller")
        private String seller;
        @JacksonXmlProperty(localName = "SellerContactDetails")
        private SellerContactDetails sellerContactDetails;

        @Data
        @JacksonXmlRootElement(localName = "SellerContactDetails")
        public class SellerContactDetails {
            @JacksonXmlProperty(localName = "CompanyName")
            private String companyName;
            @JacksonXmlProperty(localName = "County")
            private String county;
            @JacksonXmlProperty(localName = "PhoneAreaOrCityCode")
            private String phoneAreaOrCityCode;
            @JacksonXmlProperty(localName = "PhoneCountryCode")
            private String phoneCountryCode;
            @JacksonXmlProperty(localName = "PhoneLocalNumber")
            private String phoneLocalNumber;
            @JacksonXmlProperty(localName = "Street")
            private String street;
            @JacksonXmlProperty(localName = "Street2")
            private String street2;
        }

        @JacksonXmlProperty(localName = "SellerProfiles")
        private SellerProfiles sellerProfiles;

        @Data
        @JacksonXmlRootElement(localName = "SellerProfiles")
        public class SellerProfiles {
            @JacksonXmlProperty(localName = "SellerPaymentProfile")
            private SellerPaymentProfile sellerPaymentProfile;

            @Data
            @JacksonXmlRootElement(localName = "SellerPaymentProfile")
            public class SellerPaymentProfile {
                @JacksonXmlProperty(localName = "PaymentProfileID")
                private Long paymentProfileID;
                @JacksonXmlProperty(localName = "PaymentProfileName")
                private String paymentProfileName;
            }

            @JacksonXmlProperty(localName = "SellerReturnProfile")
            private SellerReturnProfile sellerReturnProfile;

            @Data
            @JacksonXmlRootElement(localName = "SellerReturnProfile")
            public class SellerReturnProfile {
                @JacksonXmlProperty(localName = "ReturnProfileID")
                private Long returnProfileID;
                @JacksonXmlProperty(localName = "ReturnProfileName")
                private String returnProfileName;
            }

            @JacksonXmlProperty(localName = "SellerShippingProfile")
            private SellerShippingProfile sellerShippingProfile;

            @Data
            @JacksonXmlRootElement(localName = "SellerShippingProfile")
            public class SellerShippingProfile {
                @JacksonXmlProperty(localName = "ShippingProfileID")
                private Long shippingProfileID;
                @JacksonXmlProperty(localName = "ShippingProfileName")
                private String shippingProfileName;
            }

        }

        @JacksonXmlProperty(localName = "SellerProvidedTitle")
        private String sellerProvidedTitle;
        @JacksonXmlProperty(localName = "ShippingDetails")
        private ShippingDetails shippingDetails;

        @Data
        @JacksonXmlRootElement(localName = "ShippingDetails")
        public class ShippingDetails {
            @JacksonXmlProperty(localName = "CalculatedShippingRate")
            private CalculatedShippingRate calculatedShippingRate;

            @Data
            @JacksonXmlRootElement(localName = "CalculatedShippingRate")
            public class CalculatedShippingRate {
                @JacksonXmlProperty(localName = "InternationalPackagingHandlingCosts")
                private InternationalPackagingHandlingCosts internationalPackagingHandlingCosts;

                @Data
                @JacksonXmlRootElement(localName = "InternationalPackagingHandlingCosts")
                public class InternationalPackagingHandlingCosts {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "OriginatingPostalCode")
                private String originatingPostalCode;
                @JacksonXmlProperty(localName = "PackagingHandlingCosts")
                private PackagingHandlingCosts packagingHandlingCosts;

                @Data
                @JacksonXmlRootElement(localName = "PackagingHandlingCosts")
                public class PackagingHandlingCosts {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

            }

            @JacksonXmlProperty(localName = "CODCost")
            private CODCost cODCost;

            @Data
            @JacksonXmlRootElement(localName = "CODCost")
            public class CODCost {
                @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                private String currencyID;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "ExcludeShipToLocation")
            private List<String> excludeShipToLocation;
            @JacksonXmlProperty(localName = "GlobalShipping")
            private Boolean globalShipping;
            @JacksonXmlProperty(localName = "InternationalPromotionalShippingDiscount")
            private Boolean internationalPromotionalShippingDiscount;
            @JacksonXmlProperty(localName = "InternationalShippingDiscountProfileID")
            private String internationalShippingDiscountProfileID;
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "InternationalShippingServiceOption")
            private List<InternationalShippingServiceOption> internationalShippingServiceOption;

            @Data
            @JacksonXmlRootElement(localName = "InternationalShippingServiceOption")
            public class InternationalShippingServiceOption {
                @JacksonXmlProperty(localName = "ShippingService")
                private String shippingService;
                @JacksonXmlProperty(localName = "ShippingServiceAdditionalCost")
                private ShippingServiceAdditionalCost shippingServiceAdditionalCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceAdditionalCost")
                public class ShippingServiceAdditionalCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServiceCost")
                private ShippingServiceCost shippingServiceCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceCost")
                public class ShippingServiceCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServicePriority")
                private Integer shippingServicePriority;
                @JacksonXmlElementWrapper(useWrapping = false)
                @JacksonXmlProperty(localName = "ShipToLocation")
                private List<String> shipToLocation;
            }

            @JacksonXmlProperty(localName = "PromotionalShippingDiscount")
            private Boolean promotionalShippingDiscount;
            @JacksonXmlProperty(localName = "RateTableDetails")
            private RateTableDetails rateTableDetails;

            @Data
            @JacksonXmlRootElement(localName = "RateTableDetails")
            public class RateTableDetails {
                @JacksonXmlProperty(localName = "DomesticRateTable")
                private String domesticRateTable;
                @JacksonXmlProperty(localName = "DomesticRateTableId")
                private String domesticRateTableId;
                @JacksonXmlProperty(localName = "InternationalRateTable")
                private String internationalRateTable;
                @JacksonXmlProperty(localName = "InternationalRateTableId")
                private String internationalRateTableId;
            }

            @JacksonXmlProperty(localName = "SalesTax")
            private SalesTax salesTax;

            @Data
            @JacksonXmlRootElement(localName = "SalesTax")
            public class SalesTax {
                @JacksonXmlProperty(localName = "SalesTaxPercent")
                private Float salesTaxPercent;
                @JacksonXmlProperty(localName = "SalesTaxState")
                private String salesTaxState;
                @JacksonXmlProperty(localName = "ShippingIncludedInTax")
                private Boolean shippingIncludedInTax;
            }

            @JacksonXmlProperty(localName = "ShippingDiscountProfileID")
            private String shippingDiscountProfileID;
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "ShippingServiceOptions")
            private List<ShippingServiceOptions> shippingServiceOptions;

            @Data
            @JacksonXmlRootElement(localName = "ShippingServiceOptions")
            public class ShippingServiceOptions {
                @JacksonXmlProperty(localName = "FreeShipping")
                private Boolean freeShipping;
                @JacksonXmlProperty(localName = "ShippingService")
                private String shippingService;
                @JacksonXmlProperty(localName = "ShippingServiceAdditionalCost")
                private ShippingServiceAdditionalCost shippingServiceAdditionalCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceAdditionalCost")
                public class ShippingServiceAdditionalCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServiceCost")
                private ShippingServiceCost shippingServiceCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceCost")
                public class ShippingServiceCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServicePriority")
                private Integer shippingServicePriority;
            }

            @JacksonXmlProperty(localName = "ShippingType")
            private String shippingType;
        }

        @JacksonXmlProperty(localName = "ShippingPackageDetails")
        private ShippingPackageDetails shippingPackageDetails;

        @Data
        @JacksonXmlRootElement(localName = "ShippingPackageDetails")
        public class ShippingPackageDetails {
            @JacksonXmlProperty(localName = "MeasurementUnit")
            private String measurementUnit;
            @JacksonXmlProperty(localName = "PackageDepth")
            private PackageDepth packageDepth;

            @Data
            @JacksonXmlRootElement(localName = "PackageDepth")
            public class PackageDepth {
                @JacksonXmlProperty(localName = "unit", isAttribute = true)
                private String unit;
                @JacksonXmlProperty(localName = "measurementSystem", isAttribute = true)
                private String measurementSystem;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "PackageLength")
            private PackageLength packageLength;

            @Data
            @JacksonXmlRootElement(localName = "PackageLength")
            public class PackageLength {
                @JacksonXmlProperty(localName = "unit", isAttribute = true)
                private String unit;
                @JacksonXmlProperty(localName = "measurementSystem", isAttribute = true)
                private String measurementSystem;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "PackageWidth")
            private PackageWidth packageWidth;

            @Data
            @JacksonXmlRootElement(localName = "PackageWidth")
            public class PackageWidth {
                @JacksonXmlProperty(localName = "unit", isAttribute = true)
                private String unit;
                @JacksonXmlProperty(localName = "measurementSystem", isAttribute = true)
                private String measurementSystem;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "ShippingIrregular")
            private Boolean shippingIrregular;
            @JacksonXmlProperty(localName = "ShippingPackage")
            private String shippingPackage;
            @JacksonXmlProperty(localName = "WeightMajor")
            private WeightMajor weightMajor;

            @Data
            @JacksonXmlRootElement(localName = "WeightMajor")
            public class WeightMajor {
                @JacksonXmlProperty(localName = "unit", isAttribute = true)
                private String unit;
                @JacksonXmlProperty(localName = "measurementSystem", isAttribute = true)
                private String measurementSystem;
                @JacksonXmlText
                private String value;
            }

            @JacksonXmlProperty(localName = "WeightMinor")
            private WeightMinor weightMinor;

            @Data
            @JacksonXmlRootElement(localName = "WeightMinor")
            public class WeightMinor {
                @JacksonXmlProperty(localName = "unit", isAttribute = true)
                private String unit;
                @JacksonXmlProperty(localName = "measurementSystem", isAttribute = true)
                private String measurementSystem;
                @JacksonXmlText
                private String value;
            }

        }

        @JacksonXmlProperty(localName = "ShippingServiceCostOverrideList")
        private ShippingServiceCostOverrideList shippingServiceCostOverrideList;

        @Data
        @JacksonXmlRootElement(localName = "ShippingServiceCostOverrideList")
        public class ShippingServiceCostOverrideList {
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "ShippingServiceCostOverride")
            private List<ShippingServiceCostOverride> shippingServiceCostOverride;

            @Data
            @JacksonXmlRootElement(localName = "ShippingServiceCostOverride")
            public class ShippingServiceCostOverride {
                @JacksonXmlProperty(localName = "ShippingServiceAdditionalCost")
                private ShippingServiceAdditionalCost shippingServiceAdditionalCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceAdditionalCost")
                public class ShippingServiceAdditionalCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServiceCost")
                private ShippingServiceCost shippingServiceCost;

                @Data
                @JacksonXmlRootElement(localName = "ShippingServiceCost")
                public class ShippingServiceCost {
                    @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
                    private String currencyID;
                    @JacksonXmlText
                    private String value;
                }

                @JacksonXmlProperty(localName = "ShippingServicePriority")
                private Integer shippingServicePriority;
                @JacksonXmlProperty(localName = "ShippingServiceType")
                private String shippingServiceType;
            }

        }

        @JacksonXmlElementWrapper(useWrapping = false)
        @JacksonXmlProperty(localName = "ShipToLocations")
        private List<String> shipToLocations;
        @JacksonXmlProperty(localName = "Site")
        private String site;
        @JacksonXmlProperty(localName = "SKU")
        private String sKU;
        @JacksonXmlProperty(localName = "StartPrice")
        private StartPrice startPrice;

        @Data
        @JacksonXmlRootElement(localName = "StartPrice")
        public class StartPrice {
            @JacksonXmlProperty(localName = "currencyID", isAttribute = true)
            private String currencyID;
            @JacksonXmlText
            private String value;
        }

        @JacksonXmlProperty(localName = "Storefront")
        private Storefront storefront;

        @Data
        @JacksonXmlRootElement(localName = "Storefront")
        public class Storefront {
            @JacksonXmlProperty(localName = "StoreCategory2ID")
            private Long storeCategory2ID;
            @JacksonXmlProperty(localName = "StoreCategory2Name")
            private String storeCategory2Name;
            @JacksonXmlProperty(localName = "StoreCategoryID")
            private Long storeCategoryID;
            @JacksonXmlProperty(localName = "StoreCategoryName")
            private String storeCategoryName;
        }

        @JacksonXmlProperty(localName = "SubTitle")
        private String subTitle;
        @JacksonXmlProperty(localName = "TaxCategory")
        private String taxCategory;
        @JacksonXmlProperty(localName = "Title")
        private String title;
        @JacksonXmlProperty(localName = "UseTaxTable")
        private Boolean useTaxTable;
        @JacksonXmlProperty(localName = "UUID")
        private String uUID;
        @JacksonXmlProperty(localName = "VATDetails")
        private VATDetails vATDetails;

        @Data
        @JacksonXmlRootElement(localName = "VATDetails")
        public class VATDetails {
            @JacksonXmlProperty(localName = "BusinessSeller")
            private Boolean businessSeller;
            @JacksonXmlProperty(localName = "RestrictedToBusiness")
            private Boolean restrictedToBusiness;
            @JacksonXmlProperty(localName = "VATPercent")
            private Float vATPercent;
        }

        @JacksonXmlProperty(localName = "VideoDetails")
        private VideoDetails videoDetails;

        @Data
        @JacksonXmlRootElement(localName = "VideoDetails")
        public class VideoDetails {
            @JacksonXmlElementWrapper(useWrapping = false)
            @JacksonXmlProperty(localName = "VideoID")
            private List<String> videoID;
        }

        @JacksonXmlProperty(localName = "VIN")
        private String vIN;
        @JacksonXmlProperty(localName = "VRM")
        private String vRM;
    }

    @JacksonXmlProperty(localName = "ErrorHandling")
    private String errorHandling;
    @JacksonXmlProperty(localName = "ErrorLanguage")
    private String errorLanguage;
    @JacksonXmlProperty(localName = "MessageID")
    private String messageID;
    @JacksonXmlProperty(localName = "Version")
    private String version;
    @JacksonXmlProperty(localName = "WarningLevel")
    private String warningLevel;
}